My First Agent
{{ projectName }} β€Ί
{{ statusLabel }}
πŸͺ™ {{ runCreditsLabel }}
Low on credits β€” see plans β†’
{{ profileInitial }}
{{ profileName }}
{{ menuSubLine }}
WORKSPACE VIEWS
Agent Session
Memory & Dreaming
Family Dashboard
πŸ“œ My Sessions
Outcome & Graders
BUILD & INSPECT
Agent YAML
Activity Logs
ADMIN
Site Admin
Backend…
Ops console
ACCOUNT
Templates
Plans & Billing
My Profile
Sign out
This backend is running in dev mode β€” unsupported. Set AUTH_PASSCODE on the server and reload.
Cant reach the server β€” youre offline and your changes are saved locally.
when Run is clicked
set goal to
workspace: {{ wp }}
repeat until answer is ready or {{ triesHex }}
think about the next step
TOOLBELT β€” TAP TO ADD OR REMOVE Β· THE AGENT PICKS EACH LOOP
{{ t.badge }}
{{ t.label }}
{{ h }}
+ add tool
look at what came back
human in the loop: the agent checks with me
go around again ↻
done looks like {{ outcomeBadge }}
show the final answer
The agent runs this loop over and over until the goal is done. Tap Code to see the real code β†’
Monaco editor Β· generated live from your blocks
// my agent = a loop with two ways to stop
import { query } from "@anthropic-ai/claude-agent-sdk";

const goal = "find the 5 weirdest deep-sea creatures and write a fact file";
const tools = ["WebSearch", "Read", "Write"];  // allowed, not ordered!
const helpers = { "fact-checker": { description: "Double-checks every fact" } };
const workspace = { files, skills, memory };  // the agent's desk

for await (const msg of query({  // ↻ until answer is ready…
  prompt: goal,
  options: {
    allowedTools: tools, agents: helpers,
    maxTurns: 10,            // …or max turns reached
    canUseTool: askMeFirst   // human in the loop
  }
})) workspace.memory.push(msg);  // save each step into memory
Match the colours: every block on the Blocks tab is one piece of this real code.
THE REAL REQUEST β€” WHAT RUN ACTUALLY SENDS
// POST /v1/agents  (then POST /v1/environments, POST /v1/sessions, user.message)
{
  "name": "Deep-Sea Detective",
  "model": "claude-sonnet-5",
  "system": "You are a friendly kid-safe agent. Mission: find the 5 weirdest deep-sea creatures and write a fact file",
  "tools": [{
    "type": "agent_toolset_20260401",
    "default_config": { "enabled": false },
    "configs": [
      { "name": "web_search", "enabled": true,
        "permission_policy": { "type": "always_ask" } },
      { "name": "read", "enabled": true, "permission_policy": { "type": "always_ask" } },
      { "name": "write", "enabled": true, "permission_policy": { "type": "always_ask" } }
    ]
  }],
  "skills": []
}
// then the outcome block kicks it off (no user.message needed):
{ "type": "user.define_outcome", "description": goal,
  "rubric": { "type": "text", "content": "done looks like…" }, "max_iterations": 3 }
The exact JSON your blocks compile to β€” goal β†’ system, toolbelt β†’ configs, human in the loop β†’ a check_with_me custom tool the agent must answer through you.
AGENT SESSION {{ runCostLabel }}
{{ runModelLabel }} {{ sessionIdLabel }} {{ modeLabel }}
πŸ‘ Shared session β€” view only
This session isn’t available β€” it may be private, removed, or the share link may have expired.
Press Run β–Ά or send a message to start the mission…
{{ row.tag }}
{{ row.text }}
AGENT
{{ runPreview }}β–Œ
permission: let the agent use {{ runPendingName }}?
the agent asks you: {{ runPendingQuestion }}
{{ runPendingContext }}
All done β€” {{ runStopText }}
{{ runSummary }}
A parent can unlock more with a bigger plan β€” See plans β†’
πŸŽ‰ {{ firstSuccessText }}
AGENT CONFIG β€” SYNCED WITH YAML
GOAL β€” WHAT THE AGENT SHOULD DO
Synced live with the coral block β€” this is the mission Run sends.
NAME
DESCRIPTION
MODEL
SYSTEM PROMPT
Loaded from the YAML page when saved β€” edits here are what Run sends.
TOOLBELT CONFIG
{{ tr.check }}
{{ tr.label }}
{{ tr.desc }}
{{ tr.askLabel }}
{{ askCheck }}
human in the loop β€” the agent pauses and checks with you (its own block, not tied to tools)
MCP SERVERS
default always_ask Β· try deepwiki β€” free, no login
{{ mc.name }}
{{ mc.url }}
{{ mc.policy }}
Γ—
Add a tool server
Pick a server your agent can use. The Playground always works β€” perfect for your first try.
{{ e.name }}
{{ e.badge }}
{{ e.blurb }}
{{ e.tools }}
{{ e.testMsg }}
HUMAN IN THE LOOP
Gives the agent a check_with_me custom tool. When it calls the tool, the session pauses (requires_action) until you answer β€” your reply goes back as user.custom_tool_result and becomes part of the agent's context. Not tied to web_search / read / write permissions.
{{ askCheck }}
enabled β€” show the block and give the agent the tool
WHEN SHOULD IT CHECK WITH YOU? β€” becomes the tool's description
Heads-up from the field: humans approve ~93% of prompts and tune out fast β€” steer the agent to ask FEWER, higher-stakes questions, not more.
WORKSPACE
FILES
synced to the sandbox via the Files API when live
{{ f.path }}
{{ f.size }}
{{ f.date }}
{{ f.statusLabel }}
πŸ‘
↓
Γ—
{{ fileViewPath }}
{{ fileViewBody }}
SKILLS
stored locally, attached at agent create
{{ sk.name }}
Γ—
MEMORY
syncs to your local file system
{{ m.path }}
{{ m.preview }}
Γ—
{{ dreamStatusText }}
DREAM REPORT β€” dream-log.md
{{ dreamReportBody }}
🧠 MEMORY & DREAMING
DREAM EFFECTIVENESS β€” is dreaming curating or bloating?
{{ d.when }}
{{ d.delta }}
files
{{ d.filesLabel }}
size
{{ d.bytesLabel }}
read the dream report β†’
{{ dashDreamEmpty }}
MEMORY β€” what your agent has learned {{ memCounts }}
{{ grp.folder }} Β· {{ grp.count }}
{{ mf.name }}
{{ mf.tag }}
{{ mf.body }}
{{ archivedToggleLabel }}
πŸ‘ͺ FAMILY β€” PARENT DASHBOARD
{{ famUnavailableMsg }}
{{ famPlanLine }}
{{ famBalanceLine }}
CHILDREN β€” profiles, controls & spend this month
{{ ch.name }}
{{ ch.activeLabel }}
{{ ch.spendLine }}
{{ ch.bashLabel }}
{{ ch.mcpLabel }}
{{ ch.fetchLabel }}
{{ ch.hitlLabel }}
models
{{ m.label }}
+ add a child profile
RECENT RUNS β€” what they cost
{{ r.when }}
{{ r.model }}
{{ r.stop }}
{{ r.credits }}
{{ r.dollars }}
No runs yet this period β€” costs appear here after each run.
πŸ“œ MY SESSIONS
{{ historyUnavailableMsg }}
YOUR RUNS β€” NEWEST FIRST Β· TAP A ROW TO OPEN ITS REPLAY
{{ hr.when }}
{{ hr.model }}
{{ hr.status }}
shared
{{ hr.credits }}
No sessions yet β€” press Run β–Ά and your runs will show up here.
πŸ›  SITE ADMIN β€” SITE OVERVIEW
{{ adminUnavailableMsg }}
{{ t.value }}
{{ t.label }}
computed $ split β€” {{ adminCostSplit }}
Dollar figures are computed from usage events, not Anthropics invoice β€” reconcile against the org-level Usage/Cost API.
USERS β€” COMPUTED SPEND PER ACCOUNT
{{ u.name }}
{{ u.sub }}
{{ u.line }}
{{ u.adminLabel }}
BY MODEL
{{ m.model }}
{{ m.line }}
PLANS
{{ p.name }} Β· {{ p.line }}
RECENT RUNS (ALL ACCOUNTS)
{{ r.when }}
{{ r.model }}
{{ r.line }}
{{ r.stop }}
ALL SESSIONS (EVERY ACCOUNT) β€” TAP TO OPEN
{{ asr.when }}
{{ asr.who }}
{{ asr.model }} Β· {{ asr.status }} Β· {{ asr.meta }}
shared
No sessions recorded yet.
{{ adminReconLine }}
GLOBAL TEMPLATES
{{ tplAdminMsgText }}
No global templates yet β€” create the first one.
{{ gt.name }}
{{ gt.sub }}
{{ tplEditorTitle }}
Add MCP from Library:
{{ gtErr }}
OUTCOME β€” WHAT "DONE" LOOKS LIKE
Sent as user.define_outcome β€” a separate-context grader scores each rubric line and the agent iterates until satisfied or out of tries.
RUBRIC β€” MARKDOWN CRITERIA, ONE GRADEABLE LINE EACH
RUBRIC SOURCE
TRIES
{{ maxIterText }}
default 3 Β· max 20
GRADER LIBRARY
checked graders AND together into the rubric Β· tap i for details
{{ g.check }}
{{ g.label }}
{{ g.kind }}
i
{{ g.detail }}
emits β†’ {{ g.emit }}
{{ rubricWarning }}
COMPOSED RUBRIC β€” SENT WITH user.define_outcome
{{ composedRubric }}